home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / film.tv.it.ifs < prev    next >
Encoding:
Text File  |  2005-02-01  |  9.5 KB  |  262 lines

  1. // GETINFO SCRIPTING
  2. // Film.TV.it - by Pivello
  3.  
  4. (**************************************************
  5. *  Movie importation script for:                  *
  6. *  Film.TV.it, http://www.Film.TV.it              *
  7. *                                                 *
  8. * (P)2005 Pivello                                 *
  9. *                                                 *
  10. *  30.01.2005 First beta test release             *
  11. *  31.01.2005 First pubblic release               *
  12. *                                                 *
  13. *  For use with Ant Movie Catalog 3.4.1 ->        *
  14. *  www.antp.be/software/moviecatalog              *
  15. *                                                 *
  16. *  The source code of the script can be used in   *
  17. *  another program only if full credits to        *
  18. *  script author and a link to Ant Movie Catalog  *
  19. *  website are given in the About box or in       *
  20. *  the documentation of the program               *
  21. ***************************************************)
  22.  
  23. program FilmTVIt;
  24.  
  25. const
  26.   UrlBase = 'http://www.film.tv.it';
  27.   QueryBase = UrlBase + '/cerca.php?ricerca=avanzata&titolo=';
  28.   QueryFilm = UrlBase + '/scheda.php?film=';
  29.   ImagePath = UrlBase + '/imgbank/';
  30.  
  31.   cStartId = 'Verde"><a href="scheda.php?film='; // ID start marker
  32.   cEndId = '" class="fTitolettoFilm"';           // ID end marker
  33.   cStartTitle = '/> ';                      // Title start marker
  34.   cEndTitle = '</a></span>';                     // Title end marker
  35.   cStartTranslTitle = 'fTitoloFilmBianco">';     // Translated title start marker
  36.   cEndTranslTitle = '</span>';                   // Translated title end marker
  37.   cStartImg = 'img src="imgbank/';               // Image start marker
  38.   cEndImg = '" width="';                         // Image end marker
  39.   cStartGeneric = 'Lite" bgcolor="#5B6E80" valign="top">';
  40.   cEndGeneric = ' ';                        // Generic field marker
  41.   cStartDirector = 'fLinkBianco>';               // Director start marker
  42.   cEndDirector = '</a>';                         // Director end marker
  43.   cStartCast = 'fLinkBianco>';                   // Actor start marker
  44.   cEndCast = '</a>';                             // Actor end marker
  45.   cEndGeneric2 = '</td>';                        // Generic end marker 2
  46.   cBeginDesc = '"La Trama" /></p>';              // Description begin marker
  47.   cStartDesc = '<p class="testo">';              // Description start marker
  48.   cEndDesc = '</p>';                             // Description end marker
  49.   cStartComm = '<p class="testo"><i>';           // Comment start marker
  50.   cEndComm = '</i></p>';                         // Comment end marker
  51. var
  52.   Page: TStringList;
  53.   MovieUrl, MovieName, OriginalStr, TranslatedStr, PageStr:  string;
  54.  
  55. // ---------------------------------------------
  56. // PAGE PACKING (remove extra spaces, tabs & CR)
  57. // IN:  page Url     (string)
  58. // OUT: compact page (string)
  59. // ---------------------------------------------
  60. function RemoveExtraChars(Url: string): string;
  61. var
  62.   Temp: string;
  63.   PackedPage: string;
  64.   CharPos: Integer;
  65.   n: Integer;
  66. begin
  67.   Page.Text := GetPage(Url);
  68.   for n:=0 to Page.Count-1 do
  69.    PackedPage := PackedPage + ' ' + Page.GetString(n);
  70.   repeat
  71.    CharPos := pos('  ', PackedPage);
  72.    if CharPos = 0 then
  73.     CharPos := pos(#9, PackedPage);
  74.    if CharPos <> 0 then
  75.     begin
  76.      Temp := copy(PackedPage, 1, CharPos -1);
  77.      Delete(PackedPage, 1, CharPos);
  78.      PackedPage := Temp + PackedPage;
  79.     end;
  80.   until((pos('  ', PackedPage) = 0) and (pos(#9, PackedPage) = 0));
  81.   result := PackedPage;
  82. end;
  83.  
  84. // ---------------------------------
  85. // GET FIELD VALUES FROM PACKED PAGE
  86. // IN:  Start marker     (String)
  87. //      End marker       (string)
  88. //      Cut Start Marker (bool)
  89. //      Cut End Marker   (bool)
  90. // OUT: value            (string)
  91. // ---------------------------------
  92. function GetValue(StartMarker, EndMarker: string; CutStartMarker, CutEndMarker: boolean): string;
  93. var
  94.   StartPos: integer;
  95.   EndPos: integer;
  96.   Value: string;
  97. begin
  98.   Value := '';
  99.   StartPos := pos(StartMarker, PageStr);
  100.   if (StartPos > 0) then
  101.    Delete(PageStr, 1, StartPos-1);
  102.   StartPos := pos(StartMarker, PageStr);
  103.   EndPos := pos(EndMarker, PageStr);
  104.   if ((StartPos > 0)and(EndPos > 0)) then
  105.    begin
  106.     if CutStartMarker then
  107.      StartPos := StartPos + length(StartMarker);
  108.     if not CutEndMarker then
  109.      EndPos := EndPos + length(EndMarker);
  110.     Value := copy(PageStr, StartPos, EndPos-Startpos);
  111.     Delete(PageStr, 1, EndPos);
  112.    end;
  113.   result := Value;
  114. end;
  115.  
  116. // -----------------------
  117. // ANALYZE MOVIE DATA PAGE
  118. // IN:  none
  119. // OUT: set Ant fields
  120. // -----------------------
  121. procedure AnalyzeMoviePage;
  122. var
  123.   i, h, m: integer;
  124.   Duration, Description, Cast, TempStr, TempImg, hh, mm: string;
  125. begin
  126.   // Get packed title main page
  127.   PageStr := RemoveExtraChars(MovieUrl);
  128.   // Translated Title field
  129.   SetField(fieldTranslatedTitle, getValue(cStartTranslTitle, cEndTranslTitle, true, true));
  130.   // Get film image
  131.   GetPicture(ImagePath + getValue(cStartImg, cEndImg, true, true), False);
  132.   // Original Title field
  133.   SetField(fieldOriginalTitle, getValue(cStartGeneric, cEndGeneric, true, true));
  134.   if(GetField(fieldOriginalTitle)='')then
  135.    SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle));
  136.   // Country field
  137.   SetField(fieldCountry, getValue(cStartGeneric, cEndGeneric, true, true));
  138.   // YearField
  139.   SetField(fieldYear, getValue(cStartGeneric, cEndGeneric, true, true));
  140.   // Director Field
  141.   SetField(fieldDirector, getValue(cStartDirector, cEndDirector, true, true));
  142.   // Actors Field
  143.   Cast := '';
  144.   repeat
  145.    TempStr := getValue(cStartCast, cEndCast, true, true);
  146.    if ((Cast<>'') and (TempStr<>'')) then
  147.     Cast := Cast + ', ';
  148.    Cast := Cast + TempStr;
  149.   until((TempStr='')or(Length(TempStr)>40));
  150.   SetField(fieldActors, Cast);
  151.   // Category Field
  152.   SetField(fieldCategory, getValue(cStartGeneric, cEndGeneric2, true, true));
  153.   // Duration field
  154.   TempStr := getValue(cStartGeneric, cEndGeneric2, true, true);
  155.   SetField(fieldLength, Copy(TempStr,1,Length(TempStr)-1));
  156.   // Producer Field
  157.   //SetField(fieldProducer, getValue( , , true, true));
  158.   // Description Field
  159.   Delete(PageStr, 1, Pos(cBeginDesc, PageStr) + Length(cBeginDesc));
  160.   SetField(fieldDescription, getValue(cStartDesc, cEndDesc, true, true));
  161.   // Comments Field
  162.   SetField(fieldComments, getValue(cStartComm, cEndComm, true, true));
  163.   // Movie URL field
  164.   SetField(fieldURL, MovieUrl);
  165.   // Display search result
  166.   DisplayResults;
  167. end;
  168.  
  169. // ------------------------------------------------------------------
  170. // FILL PICKTREE CONTROL WITH LINKS & TITLES or RETURN ONE PAGE LINK
  171. // if OneFilm flag true return Film Id else populate PickTree
  172. // IN:  OneFilm flag (bool)
  173. // OUT: one page ID  (string)
  174. // ------------------------------------------------------------------
  175. function PopulatePickTree(OneFilm: boolean): string;
  176. var
  177.   TempIdFilm: string;
  178.   TempTitle: string;
  179.   StartPos: integer;
  180.   EndPos: integer;
  181. begin
  182.   if OneFilm then
  183.    begin
  184.     StartPos := pos(cStartId, PageStr);
  185.     EndPos := pos(cEndId, PageStr);
  186.     StartPos := StartPos + Length(cStartId);
  187.     TempIdFilm := copy(PageStr, StartPos, EndPos-Startpos); // Get ID
  188.     result := QueryFilm + TempIdFilm;
  189.    end
  190.   else
  191.    begin
  192.     PickTreeClear;
  193.     repeat
  194.      StartPos := pos(cStartId, PageStr);
  195.      EndPos := pos(cEndId, PageStr);
  196.      if StartPos > 0 then
  197.       begin
  198.        StartPos := StartPos + Length(cStartId);
  199.        TempIdFilm := copy(PageStr, StartPos, EndPos-Startpos);  // Get ID
  200.        Delete(PageStr, 1, EndPos);
  201.        StartPos := pos(cStartTitle, PageStr);
  202.        EndPos := pos(cEndTitle, PageStr);
  203.        StartPos := StartPos + Length(cStartTitle);
  204.        TempTitle := copy(PageStr, StartPos, EndPos-Startpos); // Get Title
  205.        PickTreeAdd(TempTitle, QueryFilm + TempIdFilm);
  206.       end;
  207.     until(StartPos = 0);
  208.     result := '';
  209.    end
  210. end;
  211.  
  212. // ---------------------------------
  213. // ANALYZE FIRST SEARCH RESULT PAGE:
  214. // IN:  page Url (string)
  215. // OUT: none
  216. // ---------------------------------
  217. procedure AnalyzeSearchPage(Url: string);
  218. var
  219.   FilmId: string;
  220. begin
  221.   PageStr := RemoveExtraChars(Url);
  222.   if pos('Non ho trovato nessun film', PageStr) > 0 then
  223.     ShowMessage('Title not found / Nessun film trovato.')
  224.   else if pos('Si Φ verificato un errore',PageStr) > 0 then
  225.     ShowMessage('Server not available, try later / Server non disponibile, prova pi∙ tardi')
  226.   else
  227.    begin
  228.     if pos('Ho trovato 1 film', PageStr) <> 0 then
  229.      MovieUrl := PopulatePickTree(true)  // One title found
  230.     else
  231.      begin
  232.       PopulatePickTree(false);           // More titles found..
  233.       if not PickTreeExec(MovieUrl) then // ..select one
  234.        exit;
  235.      end
  236.     AnalyzeMoviePage;
  237.    end;
  238. end;
  239.  
  240. // ----------
  241. // MAIN:
  242. // IN:  none
  243. // OUT: none
  244. // ----------
  245. begin
  246.   if CheckVersion(3,4,1) then
  247.    begin
  248.     TranslatedStr := GetField(fieldTranslatedTitle);
  249.     OriginalStr := GetField(fieldOriginalTitle);
  250.     if (TranslatedStr <> '') then MovieName := TranslatedStr else MovieName := OriginalStr;
  251.     if (Input('Film.TV.It - By Pivello', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
  252.      begin
  253.       Page := TStringList.Create;
  254.       MovieUrl := QueryBase + UrlEncode(MovieName);
  255.       AnalyzeSearchPage(MovieUrl);
  256.       Page.Free;
  257.      end;
  258.    end
  259.   else
  260.    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.1)');
  261. end.
  262.